/**
* @project admin-go-api
* @name sysMenu
* @descriptions 菜单控制层
* @author 寒锋
* @date 2023-12-19 16:24:54
 */

package controller

import (
	"admin-go-api/api/entity"
	"admin-go-api/api/service"
	"admin-go-api/common/response"
	"admin-go-api/constants"
	"fmt"
	"github.com/gin-gonic/gin"
	"strconv"
)

var sysMenu = entity.SysMenu{}

// GetSysMenuList
// @Summary 菜单列表
// @Produce json
// @Description 菜单列表接口
// @Security ApiKeyAuth
// @Param menu_name query string false "菜单名称"
// @param menu_status query int false "菜单状态"
// @Success 200 {object} response.Result
// @Router /api/sysMenu/index [get]
func GetSysMenuList(c *gin.Context) {
	menuName := c.Query("menu_name")
	menuStatus, _ := strconv.Atoi(c.Query("menu_status"))
	service.SysMenuService().GetSysMenuList(c, menuName, menuStatus)
}

// GetSysMenuVoList
// @Summary 菜单下拉列表接口
// @Produce json
// @Description 菜单下拉列表接口
// @Security ApiKeyAuth
// @Success 200 {object} response.Result
// @Router /api/sysMenu/vo/list [get]
func GetSysMenuVoList(c *gin.Context) {
	service.SysMenuService().QuerySysMenuVoList(c)
}

// CreateSysMenu
// @Summary 添加菜单接口
// @Produce json
// @Description 添加菜单接口
// @Security ApiKeyAuth
// @Param data body entity.SysMenu true "data"
// @Success 200 {object} response.Result
// @Router /api/sysMenu/store [post]
func CreateSysMenu(c *gin.Context) {
	err := c.ShouldBind(&sysMenu)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysMenuService().CreateSysMenu(c, sysMenu)
}

// GetSysMenuById
// @Summary 菜单详情接口
// @Produce json
// @Description 菜单详情接口
// @Security ApiKeyAuth
// @Param menu_id query int true "菜单id"
// @Success 200 {object} response.Result
// @Router /api/sysMenu/show [get]
func GetSysMenuById(c *gin.Context) {
	id, _ := strconv.Atoi(c.Query("menu_id"))
	service.SysMenuService().GetSysMenuById(c, id)
}

// UpdateSysMenu
// @Summary 更新菜单接口
// @Produce json
// @Description 更新菜单接口
// @Security ApiKeyAuth
// @Param data body entity.SysMenu true "data"
// @Success 200 {object} response.Result
// @Router /api/sysMenu/update [put]
func UpdateSysMenu(c *gin.Context) {
	err := c.ShouldBind(&sysMenu)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysMenuService().UpdateSysMenu(c, sysMenu)
}

// DeleteSysMenu
// @Summary 删除菜单接口
// @Produce json
// @Description 删除菜单接口
// @Security ApiKeyAuth
// @Param data body entity.SysMenuIdDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysMenu/destroy [delete]
func DeleteSysMenu(c *gin.Context) {
	var dto entity.SysMenuIdDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysMenuService().DeleteSysMenu(c, dto)
}
